package com.pactera.madp.cp.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pactera.madp.cp.api.dto.taskpub.TaskPageDTO;
import com.pactera.madp.cp.api.dto.taskpub.TaskPubDto;
import com.pactera.madp.cp.api.dto.taskpub.TaskPubUpdateDto;
import com.pactera.madp.cp.api.vo.moments.ToDoListVO;
import com.pactera.madp.cp.api.vo.task.TaskDetailsByEmployeeVO;
import com.pactera.madp.cp.api.vo.task.TaskDetailsByIdVO;
import com.pactera.madp.cp.api.vo.task.TaskPageVO;

public interface TaskPubService {

    /**
     * 新增任务
     * @param dto
     * @return 是否新增成功
     */
    boolean createTask(TaskPubDto dto);

    /**
     * 分页查询
     * @param dto
     * @param page
     * @return 分页数据
     */
    Page<TaskPageVO> getPageByOut(TaskPageDTO dto, Page page);

    /**
     * 审批分页查询
     * @param dto
     * @param page
     * @return 分页数据
     */
    Page<TaskPageVO> getApprovalPageByOut(TaskPageDTO dto, Page page);

    /**
     * 获取任务详情
     * @param id
     * @return 任务详情数据
     */
    TaskDetailsByIdVO getTaskDetailsById(Integer id);

    /**
     * 待审批任务撤销
     * @param id
     */
    Boolean revoke(Integer id);

    /**
     * 修改任务
     * @param dto
     * @return 是否修改成功
     */
    boolean updateTask(TaskPubUpdateDto dto);

    /**
     * 开启任务
     */
    void startTask();

    /**
     * 已完成成员名单
     * @param taskId
     * @param page
     * @return 已完成成员名单分页数据
     */
    Page<TaskDetailsByEmployeeVO> getCompleteEmployee(Integer taskId,Page page);

    /**
     * 未完成成员名单
     * @param taskId
     * @param page
     * @return 未完成成员名单分页数据
     */
    Page<TaskDetailsByEmployeeVO> getIncompleteEmployee(Integer taskId,Page page);

    /**
     * 一键提醒未完成成员
     * @param taskId
     */
    void oneClickReminder(Integer taskId);

    /**
     * 完成任务情况统计
     */
    void taskCompletionStatistics();

    /**
     * 发布任务
     * @param id
     * @return 返回是否发布成功
     */
    boolean releaseTaskById(Integer id);

    /**
     * 发布任务审核
     * @param id
     * @return 返回是否发布成功
     */
    boolean approvalTaskById(Integer id, String  opinion, Integer state);

    /**
     * 获客任务/朋友圈任务待办
     * @param page
     * @param userId
     * @param status
     * @param type
     * @return 获客任务/朋友圈任务待办分页数据
     */
    Page<ToDoListVO> getToDoList(Page page,String userId,Integer status,Integer type);

    /**
     * 删除过期30天的任务
     */
    void  deleteOverdueTasks();

}
